]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
StTextureCache: use right event to detect file changes
authorCosimo Cecchi <cosimo@endlessm.com>
Fri, 9 Nov 2018 21:55:53 +0000 (13:55 -0800)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 9 Nov 2018 23:42:49 +0000 (00:42 +0100)
StTextureCache installs file monitors that invalidate caches when
contents of the underlying file change.
At the moment, the cache uses the Gio.FileMonitorEvent.CHANGED event
type to make that determination.

However, that is suboptimal for at least two reasons:
- while a file is being written to disk, many CHANGED events will be
  emitted in sequence. That will cause needless cache invalidations,
  and we will risk loading the file before it's fully loaded.
- if an existing file is replaced, e.g. with g_file_replace(), we may
  not get a CHANGED event but a CREATED one instead, so the cache ends
  up never getting invalidated.

The good news is that in both of those cases GFileMonitor will send a
CHANGES_DONE_HINT event after changes have settled, or after the file
is replaced.

This commit fixes both cases by switching from the CHANGED event to
CHANGES_DONE_HINT to determine that a file has in fact changed.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/286

src/st/st-texture-cache.c

index 3bf3a5e97b5311bd8b4bd1fa23ac8dd147decea0..62190711192f51f251034c1f3b347dec12f43b3f 100644 (file)
@@ -984,7 +984,7 @@ file_changed_cb (GFileMonitor      *monitor,
   char *key;
   guint file_hash;
 
-  if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
+  if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
     return;
 
   file_hash = g_file_hash (file);